home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_gnu / adainc / a-witeio.ads < prev    next >
Text File  |  1996-01-30  |  15KB  |  513 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT RUNTIME COMPONENTS                          --
  4. --                                                                          --
  5. --                     A D A . W I D E _ T E X T _ I O                      --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.7 $                              --
  10. --                                                                          --
  11. -- This specification is adapted from the Ada Reference Manual for use with --
  12. -- GNAT.  In accordance with the copyright of that document, you can freely --
  13. -- copy and modify this specification,  provided that if you redistribute a --
  14. -- modified version,  any changes that you have made are clearly indicated. --
  15. --                                                                          --
  16. ------------------------------------------------------------------------------
  17.  
  18. with Ada.IO_Exceptions;
  19. with System;
  20. with System.Dependent_Constants;
  21.  
  22. package Ada.Wide_Text_IO is
  23.  
  24.    type File_Type is limited private;
  25.    type File_Mode is (In_File, Out_File, Append_File);
  26.  
  27.    type Count is range 0 .. System.Dependent_Constants.Count_Max;
  28.  
  29.    subtype Positive_Count is Count range 1 .. Count'Last;
  30.  
  31.    Unbounded : constant Count := 0;
  32.    --  Line and page length
  33.  
  34.    subtype Field is Integer range 0 .. System.Dependent_Constants.Field_Max;
  35.  
  36.    subtype Number_Base is Integer range 2 .. 16;
  37.  
  38.    type Type_Set is (Lower_Case, Upper_Case);
  39.  
  40.    ---------------------
  41.    -- File Management --
  42.    ---------------------
  43.  
  44.    procedure Create
  45.      (File : in out File_Type;
  46.       Mode : in File_Mode := Out_File;
  47.       Name : in String := "";
  48.       Form : in String := "");
  49.  
  50.    procedure Open
  51.      (File : in out File_Type;
  52.       Mode : in File_Mode;
  53.       Name : in String;
  54.       Form : in String := "");
  55.  
  56.    procedure Close  (File : in out File_Type);
  57.    procedure Delete (File : in out File_Type);
  58.    procedure Reset  (File : in out File_Type; Mode : in File_Mode);
  59.    procedure Reset  (File : in out File_Type);
  60.  
  61.    function Mode (File : in File_Type) return File_Mode;
  62.    function Name (File : in File_Type) return String;
  63.    function Form (File : in File_Type) return String;
  64.  
  65.    function Is_Open (File : in File_Type) return Boolean;
  66.  
  67.    ------------------------------------------------------
  68.    -- Control of default input, output and error files --
  69.    ------------------------------------------------------
  70.  
  71.    procedure Set_Input  (File : in File_Type);
  72.    procedure Set_Output (File : in File_Type);
  73.    procedure Set_Error  (File : in File_Type);
  74.  
  75.    function Standard_Input  return File_Type;
  76.    function Standard_Output return File_Type;
  77.    function Standard_Error  return File_Type;
  78.  
  79.    function Current_Input  return File_Type;
  80.    function Current_Output return File_Type;
  81.    function Current_Error  return File_Type;
  82.  
  83.    type File_Access is access constant File_Type;
  84.  
  85.    function Standard_Input  return File_Access;
  86.    function Standard_Output return File_Access;
  87.    function Standard_Error  return File_Access;
  88.  
  89.    function Current_Input  return File_Access;
  90.    function Current_Output return File_Access;
  91.    function Current_Error  return File_Access;
  92.  
  93.    --------------------
  94.    -- Buffer control --
  95.    --------------------
  96.  
  97.    procedure Flush (File : in out File_Type);
  98.    procedure Flush;
  99.  
  100.    --------------------------------------------
  101.    -- Specification of line and page lengths --
  102.    --------------------------------------------
  103.  
  104.    procedure Set_Line_Length (File : in File_Type; To : in Count);
  105.    procedure Set_Line_Length (To : in Count);
  106.  
  107.    procedure Set_Page_Length (File : in File_Type; To : in Count);
  108.    procedure Set_Page_Length (To : in Count);
  109.  
  110.    function Line_Length (File : in File_Type) return Count;
  111.    function Line_Length return Count;
  112.  
  113.    function Page_Length (File : in File_Type) return Count;
  114.    function Page_Length return Count;
  115.  
  116.    ------------------------------------
  117.    -- Column, Line, and Page Control --
  118.    ------------------------------------
  119.  
  120.    procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
  121.    procedure New_Line (Spacing : in Positive_Count := 1);
  122.  
  123.    procedure Skip_Line (File : in File_Type; Spacing : in Positive_Count := 1);
  124.    procedure Skip_Line (Spacing : in Positive_Count := 1);
  125.  
  126.    function End_Of_Line (File : in File_Type) return Boolean;
  127.    function End_Of_Line return Boolean;
  128.  
  129.    procedure New_Page (File : in File_Type);
  130.    procedure New_Page;
  131.  
  132.    procedure Skip_Page (File : in File_Type);
  133.    procedure Skip_Page;
  134.  
  135.    function End_Of_Page (File : in File_Type) return Boolean;
  136.    function End_Of_Page return Boolean;
  137.  
  138.    function End_Of_File (File : in File_Type) return Boolean;
  139.    function End_Of_File return Boolean;
  140.  
  141.    procedure Set_Col (File : in File_Type;  To : in Positive_Count);
  142.    procedure Set_Col (To : in Positive_Count);
  143.  
  144.    procedure Set_Line (File : in File_Type; To : in Positive_Count);
  145.    procedure Set_Line (To : in Positive_Count);
  146.  
  147.    function Col (File : in File_Type) return Positive_Count;
  148.    function Col return Positive_Count;
  149.  
  150.    function Line (File : in File_Type) return Positive_Count;
  151.    function Line return Positive_Count;
  152.  
  153.    function Page (File : in File_Type) return Positive_Count;
  154.    function Page return Positive_Count;
  155.  
  156.    -----------------------------
  157.    -- Characters Input-Output --
  158.    -----------------------------
  159.  
  160.    procedure Get (File : in File_Type; Item : out Wide_Character);
  161.    procedure Get (Item : out Wide_Character);
  162.    procedure Put (File : in File_Type; Item : in Wide_Character);
  163.    procedure Put (Item : in Wide_Character);
  164.  
  165.    procedure Look_Ahead
  166.      (File        : in File_Type;
  167.       Item        : out Wide_Character;
  168.       End_Of_Line : out Boolean);
  169.  
  170.    procedure Look_Ahead
  171.      (Item        : out Wide_Character;
  172.       End_of_Line : out Boolean);
  173.  
  174.    procedure Get_Immediate
  175.      (File : in File_Type;
  176.       Item : out Wide_Character);
  177.  
  178.    procedure Get_Immediate
  179.      (Item : out Wide_Character);
  180.  
  181.    procedure Get_Immediate
  182.      (File      : in File_Type;
  183.       Item      : out Wide_Character;
  184.       Available : out Boolean);
  185.  
  186.    procedure Get_Immediate
  187.      (Item      : out Wide_Character;
  188.       Available : out Boolean);
  189.  
  190.    --------------------------
  191.    -- Strings Input-Output --
  192.    --------------------------
  193.  
  194.    procedure Get (File : in File_Type; Item : out Wide_String);
  195.    procedure Get (Item : out Wide_String);
  196.    procedure Put (File : in File_Type; Item : in Wide_String);
  197.    procedure Put (Item : in Wide_String);
  198.  
  199.    procedure Get_Line
  200.      (File : in File_Type;
  201.       Item : out Wide_String;
  202.       Last : out Natural);
  203.  
  204.    procedure Get_Line
  205.      (Item : out Wide_String;
  206.       Last : out Natural);
  207.  
  208.    procedure Put_Line
  209.      (File : in File_Type;
  210.       Item : in Wide_String);
  211.  
  212.    procedure Put_Line
  213.      (Item : in Wide_String);
  214.  
  215.    --------------------------------------------------------
  216.    -- Generic packages for Input-Output of Integer Types --
  217.    --------------------------------------------------------
  218.  
  219.    generic
  220.       type Num is range <>;
  221.  
  222.    package Integer_Io is
  223.  
  224.       Default_Width : Field := Num'Width;
  225.       Default_Base  : Number_Base := 10;
  226.  
  227.       procedure Get
  228.         (File  : in File_Type;
  229.          Item  : out Num;
  230.          Width : in Field := 0);
  231.  
  232.       procedure Get
  233.         (Item  : out Num;
  234.          Width : in Field := 0);
  235.  
  236.       procedure Put
  237.         (File  : in File_Type;
  238.          Item  : in Num;
  239.          Width : in Field := Default_Width;
  240.          Base  : in Number_Base := Default_Base);
  241.  
  242.       procedure Put
  243.         (Item  : in Num;
  244.          Width : in Field := Default_Width;
  245.          Base  : in Number_Base := Default_Base);
  246.  
  247.       procedure Get
  248.         (From : in Wide_String;
  249.          Item : out Num;
  250.          Last : out Positive);
  251.  
  252.       procedure Put
  253.         (To   : out Wide_String;
  254.          Item : in Num;
  255.          Base : in Number_Base := Default_Base);
  256.  
  257.    end Integer_Io;
  258.  
  259.    -----------------------------------
  260.    -- Input-Output of Modular Types --
  261.    -----------------------------------
  262.  
  263.    generic
  264.       type Num is mod <>;
  265.  
  266.    package Modular_IO is
  267.  
  268.       Default_Width : Field := Num'Width;
  269.       Default_Base  : Number_Base := 10;
  270.  
  271.       procedure Get
  272.         (File  : in  File_Type;
  273.          Item  : out Num;
  274.          Width : in Field := 0);
  275.  
  276.       procedure Get
  277.         (Item  : out Num;
  278.          Width : in Field := 0);
  279.  
  280.       procedure Put
  281.         (File  : in File_Type;
  282.          Item  : in Num;
  283.          Width : in Field := Default_Width;
  284.          Base  : in Number_Base := Default_Base);
  285.  
  286.       procedure Put
  287.         (Item  : in Num;
  288.          Width : in Field := Default_Width;
  289.          Base  : in Number_Base := Default_Base);
  290.  
  291.       procedure Get
  292.         (From : in  Wide_String;
  293.          Item : out Num;
  294.          Last : out Positive);
  295.  
  296.       procedure Put
  297.         (To   : out Wide_String;
  298.          Item : in Num;
  299.          Base : in Number_Base := Default_Base);
  300.  
  301.    end Modular_IO;
  302.  
  303.    --------------------------------
  304.    -- Input-Output of Real Types --
  305.    --------------------------------
  306.  
  307.    generic
  308.       type Num is digits <>;
  309.  
  310.    package Float_Io is
  311.  
  312.       Default_Fore : Field := 2;
  313.       Default_Aft  : Field := Num'Digits - 1;
  314.       Default_Exp  : Field := 3;
  315.  
  316.       procedure Get
  317.         (File  : in File_Type;
  318.          Item  : out Num;
  319.          Width : in Field := 0);
  320.  
  321.       procedure Get
  322.         (Item  : out Num;
  323.          Width : in Field := 0);
  324.  
  325.       procedure Put
  326.         (File : in File_Type;
  327.          Item : in Num;
  328.          Fore : in Field := Default_Fore;
  329.          Aft  : in Field := Default_Aft;
  330.          Exp  : in Field := Default_Exp);
  331.  
  332.       procedure Put
  333.         (Item : in Num;
  334.          Fore : in Field := Default_Fore;
  335.          Aft  : in Field := Default_Aft;
  336.          Exp  : in Field := Default_Exp);
  337.  
  338.       procedure Get
  339.         (From : in Wide_String;
  340.          Item : out Num;
  341.          Last : out Positive);
  342.  
  343.       procedure Put
  344.         (To   : out Wide_String;
  345.          Item : in Num;
  346.          Aft  : in Field := Default_Aft;
  347.          Exp  : in Field := Default_Exp);
  348.  
  349.    end Float_Io;
  350.  
  351.    generic
  352.       type Num is delta <>;
  353.  
  354.    package Fixed_Io is
  355.       Default_Fore : Field := Num'Fore;
  356.       Default_Aft  : Field := Num'Aft;
  357.       Default_Exp  : Field := 0;
  358.  
  359.       procedure Get
  360.         (File  : in File_Type;
  361.          Item  : out Num;
  362.          Width : in Field := 0);
  363.  
  364.       procedure Get
  365.         (Item  : out Num;
  366.          Width : in Field := 0);
  367.  
  368.       procedure Put
  369.         (File : in File_Type;
  370.          Item : in Num;
  371.          Fore : in Field := Default_Fore;
  372.          Aft  : in Field := Default_Aft;
  373.          Exp  : in Field := Default_Exp);
  374.  
  375.       procedure Put
  376.         (Item : in Num;
  377.          Fore : in Field := Default_Fore;
  378.          Aft  : in Field := Default_Aft;
  379.          Exp  : in Field := Default_Exp);
  380.  
  381.       procedure Get
  382.         (From : in Wide_String;
  383.          Item : out Num; Last : out Positive);
  384.  
  385.       procedure Put
  386.         (To   : out Wide_String;
  387.          Item : in Num;
  388.          Aft  : in Field := Default_Aft;
  389.          Exp  : in Field := Default_Exp);
  390.  
  391.    end Fixed_Io;
  392.  
  393.  
  394.    --  generic
  395.    --     type Num is delta <> digits <>;
  396.  
  397.    --  package Decimal_IO is
  398.    --
  399.    --     Default_Fore : Field := Num'Fore;
  400.    --     Default_Aft  : Field := Num'Aft;
  401.    --     Default_Exp  : Field := 0;
  402.  
  403.    --     procedure Get
  404.    --       (File  : in File_Type;
  405.    --        Item  : out Num;
  406.    --        Width : in Field := 0);
  407.  
  408.    --     procedure Get
  409.    --       (Item  : out Num;
  410.    --        Width : in Field := 0);
  411.  
  412.    --     procedure Put
  413.    --       (File : in File_Type;
  414.    --        Item : in Num;
  415.    --        Fore : in Field := Default_Fore;
  416.    --        Aft  : in Field := Default_Aft;
  417.    --        Exp  : in Field := Default_Exp);
  418.  
  419.    --     procedure Put
  420.    --       (Item : in Num;
  421.    --        Fore : in Field := Default_Fore;
  422.    --        Aft  : in Field := Default_Aft;
  423.    --        Exp  : in Field := Default_Exp);
  424.  
  425.    --     procedure Get
  426.    --       (From : in  Wide_String;
  427.    --        Item : out Num;
  428.    --        Last : out Positive);
  429.  
  430.    --     procedure Put
  431.    --       (To   : out Wide_String;
  432.    --        Item : in Num;
  433.    --        Aft  : in Field := Default_Aft;
  434.    --        Exp  : in Field := Default_Exp);
  435.    --
  436.    --  end Decimal_IO;
  437.  
  438.    ---------------------------------------
  439.    -- Input-Output of Enumeration Types --
  440.    ---------------------------------------
  441.  
  442.    generic
  443.       type Enum is (<>);
  444.  
  445.    package Enumeration_Io is
  446.  
  447.       Default_Width : Field := 0;
  448.       Default_Setting : Type_Set := Upper_Case;
  449.  
  450.       procedure Get (File : in File_Type; Item : out Enum);
  451.       procedure Get (Item : out Enum);
  452.  
  453.       procedure Put
  454.         (File  : in File_Type;
  455.          Item  : in Enum;
  456.          Width : in Field := Default_Width;
  457.          Set   : in Type_Set := Default_Setting);
  458.  
  459.       procedure Put
  460.         (Item  : in Enum;
  461.          Width : in Field := Default_Width;
  462.          Set   : in Type_Set := Default_Setting);
  463.  
  464.       procedure Get
  465.         (From : in Wide_String;
  466.          Item : out Enum;
  467.          Last : out positive);
  468.  
  469.       procedure Put
  470.         (To   : out Wide_String;
  471.          Item : in Enum;
  472.          Set  : in Type_Set := Default_Setting);
  473.  
  474.    end Enumeration_Io;
  475.  
  476.    --  Exceptions
  477.  
  478.    Status_Error : exception renames IO_Exceptions.Status_Error;
  479.    Mode_Error   : exception renames IO_Exceptions.Mode_Error;
  480.    Name_Error   : exception renames IO_Exceptions.Name_Error;
  481.    Use_Error    : exception renames IO_Exceptions.Use_Error;
  482.    Device_Error : exception renames IO_Exceptions.Device_Error;
  483.    End_Error    : exception renames IO_Exceptions.End_Error;
  484.    Data_Error   : exception renames IO_Exceptions.Data_Error;
  485.    Layout_Error : exception renames IO_Exceptions.Layout_Error;
  486.  
  487. private
  488.    type File_Ptr is new System.Address;
  489.  
  490.    type Pstring is access String;
  491.  
  492.    --  Ada File Control Block
  493.  
  494.    type AFCB is record
  495.       AFCB_In_Use : Boolean;
  496.       Desc        : File_Ptr;
  497.       Name        : Pstring;
  498.       Form        : Pstring;
  499.       Mode        : File_Mode;
  500.       Page        : Count;
  501.       Line        : Count;
  502.       Col         : Positive_Count;
  503.       Line_Length : Count;
  504.       Page_Length : Count;
  505.       Count       : Integer;
  506.       Is_Keyboard : Boolean;
  507.       Look_Ahead  : String (1 .. 3);
  508.    end record;
  509.  
  510.    type File_Type is access AFCB;
  511.  
  512. end Ada.Wide_Text_IO;
  513.